package pck_tramitedocu.pck_src.pck_dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.dao.DataAccessException;
import pck_tramitedocu.pck_src.pck_pojos.Cls_Trabajador;
import pck_tramitedocu.pck_src.pck_pojos.Cls_menu;
import pck_tramitedocu.pck_web.pck_utiles.Cls_UtilesParaWeb;

public class Cls_dao_usuario extends Cls_dao_Mybatis_Jdbc_Connection implements itf_dao_usuario {

    public Cls_Trabajador validarUsuario(Map<String, Object> map) {
        Cls_Trabajador usuario = null;
        Connection cn = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        String cadena = "";
        try {
            cn = getDataSourceSeguridad().getConnection();
            cadena = "select id_usuario,nombre from usuario where rtrim(id_usuario)=? ";
            cadena = cadena + "and rtrim(contrasena)=?";
            ps = cn.prepareStatement(cadena);
            ps.setString(1, (String) map.get("mp_dni"));
            ps.setString(2, Cls_UtilesParaWeb.encriptarAMd5((String) map.get("mp_contrasena")));
            rs = ps.executeQuery();
            int i;
            while (rs.next()) {
                usuario = new Cls_Trabajador();
                usuario.setCodigo(rs.getString("id_usuario"));
                String nombres = rs.getString("nombre").trim();
                i = nombres.indexOf(",");
            }
            rs.close();
            ps.close();
            cn.close();
        } catch (Exception ex) {
            Logger.getLogger(Cls_dao_tablas.class.getName()).log(Level.SEVERE, null, ex);
        }
        return usuario;
    }

    public String agregarUsuarioEnPostgrestDao(Cls_Trabajador trabajador) {
        Connection cn = null;
        PreparedStatement ps = null;
        StringBuffer sb = new StringBuffer();
        Integer retorno=0;
        try {
            cn = getDataSourceSeguridad().getConnection();
            sb.append("UPDATE usuario SET contrasena = '");
            sb.append(Cls_UtilesParaWeb.encriptarAMd5(trabajador.getContrasena())+"' ");
            sb.append("WHERE RTRIM(id_usuario) = RTRIM('");
            sb.append(trabajador.getDni() + "')");
            ps = cn.prepareStatement(sb.toString());
           retorno= ps.executeUpdate();
           ps.close();
            cn.close();
        } catch (Exception ex) {
            Logger.getLogger(Cls_dao_tablas.class.getName()).log(Level.SEVERE, null, ex);
            
        }
        return retorno.equals(0)?"OK":"MAL";
    }

    public boolean agregarUsuario(Cls_Trabajador usuario) {
        Connection cn = null;
        String retorno = "";
        try {
            cn = getDataSourceSistema().getConnection();
            CallableStatement st = cn.prepareCall("{?=call fun_trabajador_menu_upd (?,?)}");
            st.registerOutParameter(1, 12);
            st.setString(2, usuario.getCodigo().split("-")[0]);
            st.setInt(3, usuario.getTipo_usuario_area());
            st.execute();
            retorno = st.getString(1);
            st.close();
            cn.close();
        } catch (SQLException ex) {
            Logger.getLogger(Cls_dao_tablas.class.getName()).log(Level.SEVERE, null, ex);
        }
        return retorno.compareToIgnoreCase("1") == 0;
    }

    public boolean actualizarUsuario(Cls_Trabajador usuario) {
        return true;
    }

    public int obteneTipoUsuarioDeTrabajadorDao(Map<String, String> map) {
        try {
            Object resp = getSqlMapClientTemplate().queryForObject("MySpacesNS-trabajador.obtenerTipoUsuarioDeTrabajadorIbt", map);
            if (resp != null) {
                return Integer.parseInt(resp + "");
            } else {
                return 0;
            }
        } catch (DataAccessException ex) {
            Logger.getLogger(Cls_dao_tablas.class.getName()).log(Level.SEVERE, null, ex);
            return 0;
        } catch (NumberFormatException ex) {
            Logger.getLogger(Cls_dao_tablas.class.getName()).log(Level.SEVERE, null, ex);
            return 0;
        }

    }

    public ArrayList<Cls_menu> obtenerMenuUsuario(String codigo) {
        ArrayList listMenu = null;
        try {
            listMenu = (ArrayList) getSqlMapClientTemplate().queryForList("MySpacesNS-tablas.getMenuUsuario", codigo);
        } catch (DataAccessException ex) {
            Logger.getLogger(Cls_dao_tablas.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listMenu;
    }

    public boolean grabarMenuUsuario(String codigo, List menu) {
        return true;
    }
}
